第一篇,我想先從 C++ 這個「老」程式語言的歷史談起。了解語言的歷史是為了理解其發展脈絡,並對其未來的有所掌握。
喜歡一個東西,你會想了解她的一切。懂了程式語言的誕生與發展史,觀察其後的發展趨勢,掌握新功能對專案帶來的影響,藉此精進開發技能。
哪個程式語言沒有缺點?我認為專業的 C++ 開發者皆需知道「御用兵器」的來由,以及委員會在評估新功能時,做了哪些取捨,才能給出「建設性的評論」,避免人云亦云。
那麼,開始講古。
我花了點時間整理 C++ 程式語言的大件事,製成圖,做為日後說明的參考。
注意,底下 C++ 事件簿不包含全部事件,我只抓出幾個我認為重要的事件,並簡短說明。
西元一九七九年,C++ 之父 Bjarne Stroustrup 發現 Simula 這個慢吞吞的程式語言有一些功能很不錯,但其執行效率太差,無法應用於實務。起心動念,便著手設計這個事後對電腦科技以及千千萬萬人生計產生巨大影響的程式語言。
由於以 C 語言為基底打造,該語言時名「C with Classes」,並於西元一九八三年正式更名為「C++」—一個不世出的程式語言就此誕生。
一九八五年,Bjarne Stroustrup 出版《The C++ Programming Language》,同年推出編譯器 Cfront 1.0。
一九八九年,Cfront 2.0 釋出。「多重繼承」、「Pointer to members」等功能出現在這個版本。另外,值得一提的是,這個版本還沒有 STL。
一九九二年,C++ 實作了 Alex Stepanov 提出的 STL(Standard Template Library),C++ 標準函式庫。
一九九八年是 C++ 大事件,C++98 ISO 標準規格正式發佈,包含許多重要功能,如 RTTI、Containers、Algorithms、Iterators、Function Objects。這大概是最多人使用的版本,我入行的第一個 C++ 編譯器是 Microsoft Visual C++ 6.0 加上若干版本更新。
五年後,也就是 2003 年,C++03 發佈。這只是個小改版,但花了五年的時間!不過,跟下一個大版本發佈的時間相比,「五年」算短了。
C++ 標準規格由「標準委員會(Committee)」制定,並將定稿送交「ISO(國際標準化組織)」審核,通過後公佈,成為國際標準。編譯器開發商依據這個標準,開發相容的編譯器。
也因此,「跨平台」是 C++ 的天性。近年來,幾個大型的編譯器廠商積極支援 C++ 標準規格,形成良性競爭,對開發者來說是一大利多。
不過,雖然有統一的標準規格,但實務上,各家編譯器支援 C++ 標準規格的程度不一。我建議對常用的編譯器對 C++ 標準規格的支援度,要一點概念,才不會踩到雷爆了,連自己怎麼死的都不知道。
下一篇,將進入主題——Modern C++。